﻿using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using Business.Classes;
using DAL;

namespace UI
{
    public partial class visualizarPostNew : System.Web.UI.Page
    {
        Usuario currentUser = null;
        int idPostNew = 0;
        PostNewBusiness postNewBusiness;
        ComentarioBusiness comentarioBusiness;
        PostNew postNew;
        protected void Page_Load(object sender, EventArgs e)
        {
            currentUser = (Usuario)Session["user"];

            if (currentUser == null)
            {
                btAddComment.Visible = false;
                txtComment.Visible = false;
                ibtFavoritar.Visible = false;
                ibtSeguir.Visible = false;
            }
           
            pnFalha.Visible = false;
            pnSucesso.Visible = false;

            idPostNew = Convert.ToInt32(Request.QueryString["idPostNew"]);
               
            if (idPostNew == 0)
            {
                Response.Redirect(new Controlador.Controladora().GetHomePage());
            }
            else
            {
                comentarioBusiness = new ComentarioBusiness();
                postNewBusiness = new PostNewBusiness();
                postNew = postNewBusiness.getPostNewByID(idPostNew);

                foreach (Tag tag in new TagBusiness().getTagsByPostNew(postNew))
                {
                    lbTags.Items.Add(tag.descricao);
                }

                IncrementaQtdVezesLidas(postNew);

                //Incrementa pontos para o dono da post.
                if (!IsPostBack)
                {
                    new UsuarioBusiness().IncrementaPontos(postNew.Usuario);
                }

                lbTitulo.Text = postNew.titulo;
                lbContentPostNew.Text = postNew.descricao;
                imgPostNew.Src = "~/FrmViewImagePostNew.aspx?idImagem=" + postNew.Imagem.idImagem.ToString();
                //imgPostNew.ImageUrl = postNew.Imagem.caminho;
                //pegando comentario da potNew

                FillGridComent();
            }
        }

        protected void btAddComment_Click(object sender, EventArgs e)
        {
            Comentario comentario = new Comentario()
            {
                descricao = txtComment.Text,
                idUsuario = currentUser.idUsuario,
                idPostNew = idPostNew,
                data = DateTime.Now
            };
            try
            {
                int qtdComentarios = postNew.Comentarios.Count;
                
                comentarioBusiness.insertComentario(comentario);
                txtComment.Text = string.Empty;
                FillGridComent();

                //Incrementa pontos para quem comentou e para o dono da post!
                UsuarioBusiness usuarioBusiness = new UsuarioBusiness();
                if (currentUser != postNew.Usuario)
                {
                    if (qtdComentarios == 0)
                        usuarioBusiness.IncrementaPontos(currentUser, 2);//Caso seja o primeiro a comentar a post!
                    else
                        usuarioBusiness.IncrementaPontos(currentUser);


                    usuarioBusiness.IncrementaPontos(postNew.Usuario, 2);
                }
            }
            catch (Exception)
            {
                
                throw;
            }
        }

        void IncrementaQtdVezesLidas(PostNew postNew)
        {
            try
            {
                postNew.qtdLidas = (postNew.qtdLidas == null? 1: postNew.qtdLidas + 1);
                postNewBusiness.updatePostnew(postNew);
            }
            catch (Exception)
            {
                
                throw;
            }
        }

        protected void ibtFavoritar_Click(object sender, ImageClickEventArgs e)
        {
            try
            {
                new UsuarioFavoritoBusiness().InsertFavoritos(postNew, new UsuarioBusiness().getUsuarioByID(currentUser.idUsuario));
                //Incrementa pontos pro dono da postNew!
                new UsuarioBusiness().IncrementaPontos(postNew.Usuario);
                pnSucesso.Visible = true;
                lbMsgSucesso.Text = "PostNew favoritada com sucesso!";
            }
            catch (Exception ex)
            {
                pnFalha.Visible = true;
                lbMsgFalha.Text = "Falha ao tentar favoritar PostNew! Detalhe:<br/>" + ex.Message;
            }
        }

        private void FillGridComent()
        {
            try
            {
                gvComment.DataSource = Session["ds"] = comentarioBusiness.getComentarioByPostNew(postNew).OrderByDescending(x=> x.data).ToList();
                gvComment.DataBind();
            }
            catch (Exception)
            {
                pnFalha.Visible = true;
                lbMsgFalha.Text = "Falha ao carregar os comentarios da Post New";
            }
        }

        protected void gvComment_PageIndexChanging(object sender, GridViewPageEventArgs e)
        {
            pnFalha.Visible = false;

            gvComment.PageIndex = e.NewPageIndex;
            gvComment.DataSource = Session["ds"];
            gvComment.DataBind();
        }

        protected void ibtSeguir_Click(object sender, ImageClickEventArgs e)
        {
            try
            {
                new ManterSeguidosBusiness().SeguirUsuario(postNew.Usuario, currentUser);
                pnSucesso.Visible = true;
                lbMsgSucesso.Text = "Agora você está seguindo o(a) " + postNew.Usuario.nome;
            }
            catch (Exception ex)
            {
                pnFalha.Visible = true;
                lbMsgFalha.Text = "Falha ao tentar seguir usário! Detalhe:<br/>" + ex.Message;
            }
        }
    }
}
